package it.unipg.bipod.applicationLogic;

import it.unipg.bipod.ResManager;
import it.unipg.bipod.dataAccess.DataManager;

import java.io.IOException;
import java.util.Properties;

/**
 * Application gestisce una sessione di accesso a BiPoD.<br>
 * Le sue sottoclassi {@link DocenteApplication} e {@link SegretarioApplication}
 * forniscono metodi specializzati per ciascuna operazione rispettivamente di
 * docenti e segretari.
 * 
 * @author LorenzoPorzi
 * @see DocenteApplication
 * @see SegretarioApplication
 */
public abstract class Application {
	private DataManager dataManager;
	private Properties settings;
	private ResManager resManager;
	
	/**
	 * Costruisce una nuova Application interfacciata al DataManager specificato.<br>
	 * Iniziallizza anche le istanze di ResManager e Properties che verranno poi
	 * utilizzate dall'applicazione.
	 * 
	 * @param dataManager
	 * @throws IOException
	 */
	Application(DataManager dataManager) throws IOException {
		this.dataManager = dataManager;
		this.resManager = ResManager.getInstance();
		this.settings = resManager.getApplicationSettings();
	}

	/**
	 * Recupera il DataManager associato a questo oggetto.
	 * 
	 * @return l'istanza di DataManager utilizzata da questo oggetto.
	 */
	public DataManager getDataManager() {
		return dataManager;
	}

	/**
	 * Recupera il Properties associato alle impostazioni dello strato di logica applicativa.
	 * 
	 * @return l'istanza di Properties contenente le impostazioni dello strato di logica applicativa.
	 */
	public Properties getSettings() {
		return settings;
	}
	
	/**
	 * Recupera l'istanza di default di ResManager.
	 * 
	 * @return l'istanza di default di ResManager.
	 */
	public ResManager getResManager() {
		return resManager;
	}
}